import axios from 'axios';

// 获取当前主机地址和端口
const getBaseUrl = () => {
  const hostname = window.location.hostname;
  const port = window.location.port || '3001';
  return `http://${hostname}:${port}/api`;
};

const API_URL = import.meta.env.VITE_API_URL || getBaseUrl();

const apiClient = axios.create({
  baseURL: API_URL,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
});

// 添加请求拦截器
apiClient.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    } else {
      console.warn('未找到认证令牌，请先登录');
      // 如果不是登录相关的请求，重定向到登录页面
      if (!config.url?.includes('/auth/login')) {
        window.location.href = '/login';
      }
    }
    return config;
  },
  (error) => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 添加响应拦截器
apiClient.interceptors.response.use(
  (response) => response,
  (error) => {
    console.error('响应错误:', error);
    
    if (error.response) {
      switch (error.response.status) {
        case 401:
          console.warn('认证失败，请重新登录');
          localStorage.removeItem('token');
          localStorage.removeItem('user');
          window.location.href = '/login';
          break;
        case 403:
          console.warn('没有权限访问该资源');
          break;
        case 400:
          console.warn('请求参数错误:', error.response.data);
          break;
        default:
          console.error('服务器错误:', error.response.data);
      }
    } else if (error.request) {
      console.error('网络错误，无法连接到服务器');
    } else {
      console.error('请求配置错误:', error.message);
    }
    
    return Promise.reject(error);
  }
);

export default apiClient;